Barcodes are commonly used for marking items for identification. For example, barcodes are used for marking a product or part to permit identification of the product or part and retrieval of information about the product or part. As another example, barcodes can be used to mark packages to facilitate automated tracking and sorting of the packages during shipment. A barcode can identify a package, allowing for a tracking and sorting system to retrieve information about the package, such as the shipping address, destination address, etc., and use that information for routing the package.
There are several widely used barcode standards. A barcode standard provides a mapping between barcodes conforming to the standard and the data encoded by the barcodes. For example, some barcode standards (e.g., linear or one dimensional barcode standards) utilize a sequence of bars and spaces of various widths to encode data. Examples of such standards include Codabar, Code 39, and Code 128. Referring to Code 128 as an example, Code 128 uses a sequence of bars and spaces to encode numeric or alphanumeric characters. For example, a unique pattern of bars and spaces of particular widths encodes, e.g., the character ‘A.’ Similarly, other unique patterns of bars and spaces encode the remainder of the characters Code 128 can represent. A bar or space can be referred to as an element. In Code 128, an element can be 1, 2, 3, or 4 modules wide. The encoding for each character consists of six elements: three black bars and three white spaces. Encodings for multiple characters can be concatenated to form a barcode encoding a string of characters. Some barcode standards utilize 2 dimensional codes, e.g., consisting of a two dimensional array of white, black, and/or color blocks or shapes. Examples of such barcode standards include Code 1 and QR Code. More generally, a barcode can be a machine-readable set of elements that encode data.
Barcodes can be read by barcode readers. Barcode readers can utilize, for example, lasers, line scan cameras, and/or area scan cameras to capture images of barcodes. The barcode reader can then analyze the elements in the barcode and convert the elements into the represented data using the mapping provided by the barcode standard. This process can be referred to as decoding. In some instances, barcode readers can capture a portion of the barcode in a given image. For example, in an application where a barcode reader reads barcodes on packages moving past the scanner on a conveyor belt, the barcode scanner might capture only a portion of a particular barcode in a single image. If only a portion of the barcode appears in the image, the barcode reader might not be able to decode the entire barcode.